﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.Xsl;
using Ent.Inscripcion.Core;
using Ext.Net;
using Ent.Inscripcion.Core.Core;
using Ent.Inscripcion.Core.Administracion;

namespace Ent.Inscripcion.Presentacion.Administracion.Reportes
{
    public partial class ListadoRegistradosExamen : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        /// <summary>
        /// Permite exportar a excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ToExcel(object sender, EventArgs e)
        {
            string json = GridData.Value.ToString();
            var eSubmit = new StoreSubmitDataEventArgs(json, null);
            XmlNode xml = eSubmit.Xml;

            this.Response.Clear();
            this.Response.ContentType = "application/vnd.ms-excel";
            this.Response.AddHeader("Content-Disposition", "attachment; filename=reporteRegistradosTutorias.xls");
            var xtExcel = new XslCompiledTransform();
            xtExcel.Load(Server.MapPath("Excel.xsl"));
            xtExcel.Transform(xml, null, this.Response.OutputStream);
            this.Response.End();
        }

        /// <summary>
        /// Listar los estudiantes registrados para dar el examen en la fecha y hora seleccionada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnListar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                DateTime fecha;
                DateTime.TryParse(e.ExtraParams["Fecha"], out fecha);

                DateTime hora;
                DateTime.TryParse(e.ExtraParams["Hora"], out hora);
                var cedula = e.ExtraParams["Cedula"];
                var criteria = EstudianteExamenCriterio.NewEstudianteExamenCriterio();
                criteria.Fecha = fecha;
                criteria.Hora = hora;
                criteria.Cedula = cedula;

                var lista = EstudianteExamenLista.GetEstudianteExamenLista(criteria);
                /*var lista = new List<object>();
                var persona = new { Id = "demo", Apellidos = "cuenca", Imagen = "noDisponible.jpg", Nombre = "Luis", Carrera = "", Celular = "", Direccion = "", Email = "", Identificacion = "0704682012", Telefono = "" };
                  lista.Add(persona);         */

            stoRegistrados.DataSource = lista;
            stoRegistrados.DataBind();
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite cargar una imagen al estudiante
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardarImagen_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var nombre = e.ExtraParams["Identificacion"];

                fufImagenEstudiante.PostedFile.SaveAs(MapPath(string.Format("~/Administracion/Images/{0}.jpg", nombre)));
                fufImagenEstudiante.SetValue(nombre);
                imgEstudiante.ImageUrl = string.Format("../Images/{0}.jpg",nombre );
                hidImagen.SetValue(nombre+".jpg");
                var estudiante = Estudiante.GetEstudiante(nombre);
                if (estudiante !=null)
                {
                    estudiante.Imagen = nombre + ".jpg";
                    estudiante.Save();
                }
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite guardar el estado del estudiante cuando ya rindio el examen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var identificacion = e.ExtraParams["Identificacion"];
                var idSolicitud = e.ExtraParams["Id"];
                var observacion = e.ExtraParams["Observacion"];
                var siPresento = e.ExtraParams["SiPresento"];
                var noPresento = e.ExtraParams["NoPresento"];
                
                var solicitud = RegistroExamen.GetRegistroExamen(Guid.Parse(idSolicitud));
                solicitud.Observacion = observacion;
                solicitud.Estado = siPresento == "true" ? 1 : 0;
                hidEstado.SetValue(solicitud.Estado);
                if (noPresento=="true")
                {
                    solicitud.Fecha=solicitud.Fecha.AddDays(28);
                    EnviarMail(e,solicitud);
                }
                solicitud.Save();
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        private void EnviarMail(DirectEventArgs e, RegistroExamen solicitud)
        {
            try
            {
                var cuerpoMensaje = string.Format(ManejadorRecursos.GetRecurso("MensajeNoAsistioExamen"), solicitud.Fecha.ToLongDateString(), e.ExtraParams["HoraInicio"],Environment.NewLine );
                var estudiante = Estudiante.GetEstudiante(Guid.Parse(solicitud.EstudianteId));
                var envioEmail = new EnvioEmail();
                envioEmail.EnviarEmail(estudiante.Email, "Asignación Horario Exámen", cuerpoMensaje);
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }
    }
    
}